package com.heima.leetcode.practice;

import java.util.LinkedList;

/**
 * @description: leetcode 20 有效的括号
 * @author 勾新杰
 * @version 1.0
 * @date 2024/12/6 8:52
 */
public class E20 {

    /**
     * <h3>方法一：往栈里面压入左括号，使用if else</h3>
     * @param s 给定的字符串
     * @return 是否是有效的括号
     */
    public boolean isValid1(String s) {
        char[] str = s.toCharArray();
        LinkedList<Character> stack = new LinkedList<>();
        for(char c : str){
            if (c == '(' || c == '[' || c == '{'){
                stack.push(c);
            } else {
                if(stack.isEmpty()) return false;
                char left = stack.pop();
                if(c == ')' && left != '('){
                    return false;
                } else if(c == ']' && left != '['){
                    return false;
                } else if(c == '}' && left != '{'){
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }

    /**
     * <h3>方法二：遇到左括号往栈里压入右括号，使用switch，推荐</h3>
     * @param s 给定的字符串
     * @return 是否是有效的括号
     */
    public boolean isValid(String s) {
        char[] str = s.toCharArray();
        LinkedList<Character> stack = new LinkedList<>();
        for(char c : str){
            switch(c){
                case '(' -> stack.push(')');
                case '[' -> stack.push(']');
                case '{' -> stack.push('}');
                default -> {
                    if(stack.isEmpty() || stack.pop() != c) return false;
                }
            }
        }
        return stack.isEmpty();
    }
}
